/*
//
//              INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license  agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in  accordance  with the terms of that agreement.
//    Copyright (c) 2007-2008 Intel Corporation. All Rights Reserved.
//
//
*/

#ifndef __UMC_AVS_DEC_PROCESSING_UNIT_REC_H
#define __UMC_AVS_DEC_PROCESSING_UNIT_REC_H

#include "umc_avs_processing_unit.h"
#include "umc_avs_list.h"
#include "umc_avs_dec_decompressor.h"
#include "umc_avs_dec_decompressor_fld.h"

namespace UMC
{

class AVSRecProcessingUnit : public AVSListElement<AVSProcessingUnit>
{
public:
    // Constructor
    AVSRecProcessingUnit(void);
    // Destructor
    virtual
    ~AVSRecProcessingUnit(void);

    // Let the performer find the job
    virtual
    bool LoadJob(AVSListElement<AVSFrame> *pFrameList);

    // Main working function
    virtual
    Status DoJob(void);

    // Error handling function
    virtual
    Status HandleError(void);

protected:
    // Set the job done
    virtual
    void UnloadJob(void);

    AVSDecompressor *m_pDecompressor;                           // (AVSDecompressor *) pointer to being used decompressor
    AVSDecompressor m_dec;                                      // (AVSDecompressor) AVS video decompressor
    AVSDecompressorField m_decFld;                              // (AVSDecompressorField) AVS video decompressor
};

} // namespace UMC

#endif // __UMC_AVS_DEC_PROCESSING_UNIT_REC_H
